/**
 * Copyright 2020 bejson.com
 */
package com.vca.common.model.sf;


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;


/**
 * 顺丰寄件必填参数的请求参数（当前系统使用参数）
 * @author wangsong
 * @date 2020/9/15 0015 16:05
 * @return
 * @version 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="msgData对象", description="下订单业务数据报文")
public class MsgData {

    @ApiModelProperty(value = "响应报文的语言， 缺省值为zh-CN")
    @NotBlank(message = "响应报文的语言不能为空")
    private String language;

    @ApiModelProperty(value = "客户订单号，不能重复")
    @NotBlank(message = "客户订单号不能为空")
    private String orderId;

    @ApiModelProperty(value = "顺丰运单号")
    private List<WaybillNoInfo> waybillNoInfoList;

    @ApiModelProperty(value = "报关信息")
    private CustomsInfo customsInfo;

    @ApiModelProperty(value = "托寄物信息")
    private List<CargoDetail> cargoDetails;

    @ApiModelProperty(value = "拖寄物类型描述,如： 文件，电子产品，衣服等")
    private String cargoDesc;

    @ApiModelProperty(value = "扩展属性")
    private List<ExtraInfo> extraInfoList;

    @ApiModelProperty(value = "增值服务信息")
    private List<Service> serviceList;

    @ApiModelProperty(value = "收寄双方信息")
    private List<ContactInfo> contactInfoList;

    @ApiModelProperty(value = "顺丰月结卡号 月结支付时传值，现结不需传值；沙箱联调可使用测试月结卡号7551234567（非正式，无须绑定，仅支持联调使用）")
    private String monthlyCard;

    @ApiModelProperty(value = "付款方式，支持以下值： 1:寄方付 2:收方付 3:第三方付")
    private Integer payMethod;

    @ApiModelProperty(value = "快件产品类别")
    private Integer expressTypeId;

    @ApiModelProperty(value = "包裹数，一个包裹对应一个运单号；若包裹数大于1，则返回一个母运单号和N-1个子运单号")
    private Integer parcelQty;

    @ApiModelProperty(value = "客户订单货物总长")
    private BigDecimal totalLength;

    @ApiModelProperty(value = "客户订单货物总宽")
    private BigDecimal totalWidth;

    @ApiModelProperty(value = "客户订单货物总高")
    private BigDecimal totalHeight;

    @ApiModelProperty(value = "订单货物总体积")
    private BigDecimal volume;

    @ApiModelProperty(value = "订单货物总重量")
    private BigDecimal totalWeight;

    @ApiModelProperty(value = "商品总净重")
    private BigDecimal totalNetWeight;

    @ApiModelProperty(value = "要求上门取件开始时间")
    private Date sendStartTm;

    @ApiModelProperty(value = "是否通过手持终端 通知顺丰收派 员上门收件，支持以下值： 1：要求 0：不要求")
    private Integer isDocall;

    @ApiModelProperty(value = "是否返回签回单 （签单返还）的运单号， 支持以下值： 1：要求 0：不要求")
    private Integer isSignBack;

    @ApiModelProperty(value = "客户参考编码：如客户原始订单号")
    private String custReferenceNo;

    @ApiModelProperty(value = "温度范围类型，当 express_type为12 医药温控件 时必填，支持以下值： 1:冷藏 3：冷冻")
    private Integer temperatureRange;

    @ApiModelProperty(value = "订单平台类型 （对于平台类客户， 如果需要在订单中 区分订单来源， 则可使用此字段） 天猫:tmall， 拼多多：pinduoduo， 京东 : jd 等平台类型编码")
    private String orderSource;

    @ApiModelProperty(value = "备注")
    private String remark;

    @ApiModelProperty(value = "快件自取，支持以下值： 1：客户同意快件自取 0：客户不同意快件自取")
    private Integer isOneselfPickup;

    @ApiModelProperty(value = "筛单特殊字段用来人工筛单")
    private String filterField;

    @ApiModelProperty(value = "是否返回用来退货业务的 二维码URL， 支持以下值： 1：返回二维码 0：不返回二维码")
    private Integer isReturnQRCode;

    @ApiModelProperty(value = "特殊派送类型代码 1:身份验证")
    private String specialDeliveryTypeCode;

    @ApiModelProperty(value = "特殊派件具体表述 证件类型: 证件后8位如： 1:09296231（1 表示身份证， 暂不支持其他证件）")
    private String specialDeliveryValue;

    @ApiModelProperty(value = "商户支付订单号")
    private String merchantPayOrderNo;

    @ApiModelProperty(value = "是否返回签回单路由标签： 默认0， 1：返回路由标签， 0：不返回")
    private Integer isReturnSignBackRoutelabel;

    @ApiModelProperty(value = "是否返回路由标签： 默认1， 1：返回路由标签， 0：不返回；除部分特殊用户外，其余用户都默认返回")
    private Integer isReturnRoutelabel;

    @ApiModelProperty(value = "是否使用国家统一面单号 1：是， 0：否（默认）")
    private Integer isUnifiedWaybillNo;

    @ApiModelProperty(value = "签单返还范本地址")
    private String podModelAddress;

    @ApiModelProperty(value = "头程运单号（郑州空港海关必填）")
    private String inProcessWaybillNo;

    @ApiModelProperty(value = "是否需求分配运单号1：分配 0：不分配（若带单号下单，请传值0）")
    private Integer isGenWaybillNo;
}
